package netty.test17Protobuf;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;

/**
 * 一： 用户程序自定义普通任务。
 *
 * 自定义一个handler,需要继承netty 规定好的某个handler 适配器,
 */
public class Proto1ServerHandler extends ChannelInboundHandlerAdapter {


    /**
     * 如果上面继承的类是SimpleChannelInboundHandler  下面的参数 Object msg 直接可以用StudentPOJO.Student传入
     */
    @Override
    public void channelRead(final ChannelHandlerContext ctx, Object msg) throws Exception {
        //读取从客户端发送的 StudentPOJO.Student类型

        StudentPOJO.Student student=(StudentPOJO.Student)msg;
        System.out.println("客户端发送的数据id="+student.getId()+",name="+student.getName());
    }


    //2,数据读取完毕，后触发方法
    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
        //super.channelReadComplete(ctx);
        //把数据写到缓冲，然后刷新，一般来说这个地方要对发送的数据进行编码，
        ctx.writeAndFlush(Unpooled.copiedBuffer("我是服务器，读取消息完成",CharsetUtil.UTF_8));
    }

    //3,发生异常后，一般来说要关闭通道
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        System.out.println("客户端断开连接");
        ctx.channel().close();//用 ctx.close()也行
    }




}
